//
//  DDOAuthVC.swift
//  SinaMicroBlog
//
//  Created by dqw on 15/7/29.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD
class DDOAuthVC: UIViewController, UIWebViewDelegate{

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    lazy private var web = UIWebView()
    
     // MARK: - View的加载方法。
    override func loadView() {
        super.loadView()
        view = web
        web.delegate = self
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        web.loadRequest(NSURLRequest(URL: DDNetTools.sharedNetTools.oauthUrl))
    }
    
     // MARK: - webview的代理方法，不需要加override，和 collectionViewcontroller的区别，后者要加override，因为其是VC继承协议。体会返回的true和false
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        let urlString = request.URL!.absoluteString
        print(urlString)
        if !urlString.hasPrefix(DDNetTools.sharedNetTools.redirectUri){
            return true
        }
 // FIXME: - 重点：1. 在点击“授权” 和“取消”都会有百度前缀，只有前者才有code，2 一旦授权，下次登陆的时候，不再进入授权界面。而是直接发送“授权”的request。
        if let query = request.URL?.query where query.hasPrefix("code="){
            let code = query.substringFromIndex(advance(query.startIndex, "code=".characters.count))
             // FIXME: - 时刻注意网络的异步，合理按钮调用顺序。
            getAccessTokenAndSomeUserInfo(code)
        
        }else{
            close()
        }
        return false
    }
     // MARK: - 得到token的方法，在得到后进一部发送得到额外信息的请求。体会老师说的：谁的事，说来做，代码的封装。
    func getAccessTokenAndSomeUserInfo(code:String){
        
        DDNetTools.sharedNetTools.getAccessTokenAndSomeUserInfo(code) { (result, error) -> () in
            if result == nil || error != nil {
                self.netError()
            }
            else{
                DDUserAccount.aUserAccount = DDUserAccount(dict: result!)
                DDUserAccount.aUserAccount!.getAnotherUserInfoAndSaveUserAccount({ (error) -> () in
                    if error != nil {
                        self.netError()
                        return
                    }
                     // MARK: - 得到数据后发送通知，切换控制器。
                    NSNotificationCenter.defaultCenter().postNotificationName(DDSwithVCNotificaitonName, object: false)
                    self.close()
                })
            }
        }
    }

    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }

    func netError() {
        SVProgressHUD.showInfoWithStatus("你的网速不给力")
        let when = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC))
        dispatch_after(when, dispatch_get_main_queue(), { () -> Void in
           self.close()
        })

    }
    func close(){
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }
}
